all repos — caroster @ 036d5c633879bc5d207a01dff01636cc3103715a

[Octree] Group carpool to your event https://caroster.io

frontend/pages/e/[uuid]/alerts.tsx (view raw)

 1import {PropsWithChildren} from 'react';
 2import Alerts from '../../../containers/Alerts';
 3import EventLayout, {TabComponent} from '../../../layouts/Event';
 4import {
 5  EventByUuidDocument,
 6  EventEntity,
 7  TripAlertDocument,
 8  TripAlertEntity,
 9} from '../../../generated/graphql';
10import pageUtils from '../../../lib/pageUtils';
11
12interface Props {
13  eventUUID: string;
14  announcement?: string;
15  event: EventEntity;
16  tripAlertEntity: TripAlertEntity;
17}
18
19const Page = (props: PropsWithChildren<Props>) => {
20  return (
21    <EventLayout
22      {...props}
23      Tab={AlertsTab}
24      tabProps={{tripAlertEntity: props.tripAlertEntity}}
25    />
26  );
27};
28
29const AlertsTab: TabComponent<Props> = ({
30  event,
31  tripAlertEntity,
32}: {
33  event: EventEntity;
34  tripAlertEntity: TripAlertEntity;
35}) => {
36  return <Alerts event={event} tripAlertEntity={tripAlertEntity} />;
37};
38
39export const getServerSideProps = pageUtils.getServerSideProps(
40  async (context, apolloClient) => {
41    const {uuid} = context.query;
42    const {host = ''} = context.req.headers;
43    let event = null;
44    let tripAlertEntity = null;
45
46    try {
47      const {data} = await apolloClient.query({
48        query: EventByUuidDocument,
49        variables: {uuid},
50      });
51      event = data?.eventByUUID?.data;
52    } catch (error) {
53      return {
54        notFound: true,
55      };
56    }
57
58    const isCarosterPlus =
59      event?.attributes?.enabled_modules?.includes('caroster-plus');
60    if (!isCarosterPlus)
61      return {
62        notFound: true,
63      };
64
65    try {
66      const {data} = await apolloClient.query({
67        query: TripAlertDocument,
68        variables: {eventId: event.id},
69      });
70      tripAlertEntity = data.eventTripAlert.data;
71    } catch (error) {
72      return {
73        notFound: true,
74      };
75    }
76
77    return {
78      props: {
79        eventUUID: uuid,
80        tripAlertEntity,
81        metas: {
82          title: event?.attributes?.name || '',
83          url: `https://${host}${context.resolvedUrl}`,
84        },
85      },
86    };
87  }
88);
89
90export default Page;